package com.cheer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cheer.dto.OrganizationAddDTO;
import com.cheer.dto.OrganizationUpdateDTO;
import com.cheer.entity.Organization;
import com.cheer.vo.OrganizationPageVO;
import com.cheer.vo.OrganizationTreeVO;
import com.cheer.vo.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

public interface OrganizationService extends IService<Organization> {

    /**
     * 查询指定机构下的所有机构
     *
     * @param orgId 机构Id
     */
    List<OrganizationTreeVO> listByTree(Long orgId);

    /**
     * 分页查询机构及机构文明号统计信息
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @param orgId    机构Id
     */
    Page<OrganizationPageVO> getPage(Integer pageNum, Integer pageSize, Long orgId);

    /**
     * 添加机构
     *
     * @param organizationAddDTO 机构内容
     */
    Long add(OrganizationAddDTO organizationAddDTO);

    /**
     * 修改机构
     *
     * @param organizationUpdateDTO 修改内容
     */
    void update(OrganizationUpdateDTO organizationUpdateDTO);

    /**
     * 导出机构及机构文明号统计信息
     *
     * @param orgId 机构Id
     */
    void download(Long orgId);

    /**
     * 查询联合审查机构
     */
    List<OrganizationTreeVO> listJoinOrganizations();

    /**
     * 查询注册查询的机构
     */
    List<OrganizationTreeVO> listRegisteredOrganizations();

    /**
     * 删除机构
     *
     * @param orgId 机构Id
     */
    void delete(Long orgId);

    /**
     * 上传机构稳定
     *
     * @param file 文档
     */
    void upload(MultipartFile file);

    /**
     * 上传机构+管理人
     * @param file
     */
    void uploadOrgWithManager(MultipartFile file, Long pId);


    List<Organization> listByTypeAndLevel(Integer code, Integer cityLevel);

    /**
     * 获取所有上级机构的全部名称
     * @param organization
     * @return
     */
    String getAllName(Organization organization);


    List<OrganizationTreeVO> referenceList(Long adminOrgId);

    /**
     * 根据权限类型获取机构
     * @param roles
     * @return
     */
    List<Organization> listByOrgRole(ArrayList<Integer> roles);

}
